package com.li.onjava8.concurrent.cf;

import com.li.onjava8.concurrent.utils.Machina;
import com.li.onjava8.concurrent.utils.Timer;

import java.util.concurrent.CompletableFuture;

/**
 * 但是启动所有任务通常更有价值，这样就可以运行时继续前进并执行其他操作。我们通过在操作结束时添加Async来实现此目的
 * @author li
 * @date 2023/10/30 17:47
 */
public class CompletableApplyAsync {
    public static void main(String[] args) {
        Timer timer = new Timer();
        //thenApplyAsync: 异步调用，使用一个新的线程执行回调，并将此阶段的结果作为所提供函数的参数。
        CompletableFuture<Machina> future = CompletableFuture.completedFuture(new Machina(0))
                .thenApplyAsync(Machina::work)
                .thenApplyAsync(Machina::work)
                .thenApplyAsync(Machina::work)
                .thenApplyAsync(Machina::work);
        System.out.println(timer.duration());
        // join()：等待该线程终止
        System.out.println(future.join());
        System.out.println(timer.duration());
    }
}
